Міністерство освіти і науки України
Національний університет „ Львівська політехніка “
Кафедра БІ
ЗВІТ
Про виконання лабораторної роботи №3
на тему: “Ітераційні методи розв’язування систем лінійних алгебраїчних рівнянь”
Мета роботи – ознайомлення з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.
До ітераційних методів належать: метод простої ітерації, метод Зейделя, метод верхньої релаксації та інші.
Метод простої ітерації.
Нехай дано лінійну систему
(1)
Розглянемо матриці
Тоді систему (1) можна записати у вигляді матричного рівняння
(2)
Будемо вважати, що діагональні коефіцієнти (і = 1, 2,…, n).
Розв’яжемо перше рівняння системи (1) відносно , друге відносно і т.д. Тоді одержимо еквівалентну систему
(3)
де , при ; , при ;
; ;
Іноді кажуть, що система (3) зведена до нормального вигляду.
Введемо матриці ( та (
Систему (3) запишемо у вигляді
(4)
Систему (3) будемо розв’язувати методом послідовних наближень. За нульове наближення позначимо, наприклад, стовпчик вільних членів . Далі послідовно будуємо матриці-стовпці:
– перше наближення
– друге наближення і т.д.
Будь-яке (k + 1)-е наближення обчислюється за формулою:
, (k = 0, 1, 2, …) (5)
В розгорнутому вигляді .
Якщо послідовність наближень має границю
, (6)
то ця границя є розв’язком системи (3).
На практиці ітераційний процес припиняють, коли , де ( – гранична абсолютна похибка.
Завдання
Розв’язати систему лінійних алгебраїчних рівнянь методом Зейделя:
8.3*х1 + (2,62+s)*x2 + 4.1*x3 + 1.9*x4 = -10.55 + b
3.92*х1 + 8.45*x2 + (7.78-s)*x3 + 2.46*x4 = 12.21
3.77*х1 + (7.21+s)*x2 + 8.04*x3 + 2.28*x4 = 15.45 - b
2.21*х1 + (3.65-s)*x2 + 1.69*x3 + 6.99*x4 = -8.35
s=0.2*k, k=3;
b = 0.2*p, p=0
Список ідентифікаторів констант, змінних, процедур і функцій, використаних у програмі
j,i,k,m – змінні типу int, які використовуються для роботи циклів;
n, g – константи, якими вказую розміри масивів;
s,s1,f – змінні типу double які ми використовуємо при роботі програми;
a,b – змінні, за допомого яких виконуємо операції з масивами;
s – результат перевірки програми;
printf, scanf функції вводу і виводу;
Блок-схема алгоритму програми:
Текст програми:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KMD_3
{
class Program
{
static void Main()
{
const int n=4;
const int g=1;
{
int j,i,k,m;
double s,s1,f;
Random r = new Random();
int S = r.Next(0, 5);
int q = r.Next(0, 5);
double [,] a = new double[n,n];
double [,] p = new double[n,n];
double [] b = new double[n];
double[] x = new double[n];
{
a[0, 0] = 3.3;
a[0, 1] = 12.62 + 0.2 * S;
a[0, 2] = 4.1;
a[0, 3] = 1.9;
a[1, 0] = 3.92;
a[1, 1] = 8.45;
a[1, 2] = 1.78 - 0.2 * S;
a[1, 3] = 1.4;
a[2, 0] = 3.77;
a[2, 1] = 1.21 + 0.2 * S;
a[2, 2] = 8.04;
a[2, 3] = 0.28;
a[3, 0] = 2.21;
a[3, 1] = 3.65 - 0.2 * S;
a[3, 2] = 1.69;
a[3, 3] = 9.99;
for (i=0;i<n;i++)
for (k=0;k<n;k++)
p[i,k]=a[i,k];
b[0] = -10.55 + 0.2 * q;
b[1] = 12.21;
b[2] = 15.45 - 0.2 * q;
b[3] = -8.35;
for (k = 0; k < n; k++)
{
for(i=0;i<n;i++)
{
Console.Write("{0} ", a[k, i]);
}
Consol...